﻿# -*- coding: utf-8 -*-
#!/usr/bin/python

#------------------------------------------------------------------------

## @package     couloir
## \brief       gestion du type abstrait "couloir"
## \author  	Pierrick Troadec et Kawtar Hssain
## \date        28/12/2011
## \version     1.2
## \copyright   license BSD

#------------------------------------------------------------------------

#    Importations
#  -----------------

from constante import *

#   Fonctions
#  -----------------

## Constructeur du type abstrait "couloir"
##@param position : position du le couloir 
##@param longueur : longueur du couloir
##@param largeur  : largeur du couloir
##@param hauteur  : hauteur du couloir
##@param texture  : texture des murs du couloir
##@param flag     : alignement du couloir
##@return couloir : couloir initialisé
def creerCouloir(position=(0,0,0), longueur=10, largeur=2, hauteur=3, texture = textureMur, flag = 0) :
    

    couloir = {}
    
    couloir["position"]   = position
    couloir["longueur"]   = longueur
    couloir["largeur"]    = largeur
    couloir["hauteur"]    = hauteur
    couloir["texture"]    = texture
    couloir["flag"]       = flag
    
    return couloir

## Fonction d'affichage du couloir
##@param couloir : couloir a dessiner
##@param rep     : répétition de la texture des murs
def dessinerCouloir(couloir, rep = 1):

    x = couloir["position"][0]
    z = couloir["position"][2]
    w = couloir["largeur"]
    w2 = couloir["longueur"]
    h = couloir["hauteur"]
    texture = couloir["texture"]
    flag = couloir["flag"]

    if flag == VERTICAL:
        prims.afficherRectangle(position=(x,0,z),angle=90.0,dimensions=(w2, h),texture=texture, rep=rep)  
        prims.afficherRectangle(position=(x-w,0,z),angle=90.0,dimensions=(w2, h),texture=texture, rep=rep)
        prims.afficherPlafond(position=(x-w/2,h,z), texture=None ,dimensions=(w, w2))
        prims.afficherPlafond(position=(x-w/2,0.01,z), texture=sol ,dimensions=(w, w2))
        
    if flag == HORIZONTAL:
        prims.afficherRectangle(position=(x,0,z),angle=0.0,dimensions=(w2, h),texture=texture, rep=rep)  
        prims.afficherRectangle(position=(x,0,z-w),angle=0.0,dimensions=(w2, h),texture=texture, rep=rep) 
        prims.afficherPlafond(position=(x,h,z-w/2), texture=None ,dimensions=(w2, w))
        prims.afficherPlafond(position=(x,0.01,z-w/2), texture=sol ,dimensions=(w2, w))

## Recherche du potentiel couloir en vue de la gestion des collisions
##@param x            : position en abscisse du joueur
##@param z            : position en ordonnee du joueur
##@param listeCouloir : liste des différents couloirs constituant le bâtiment
##@return compteur    :
#   - si le joueur se trouve dans un couloir on retourne son id 
#   - sinon on retourne 99
def numCouloir( x, z, listeCouloir) :

    compteur = 0
    for couloir in listeCouloir:
        if couloir["flag"] == HORIZONTAL:
            if (x < couloir["position"][0] + couloir["longueur"]/2) and ( x > couloir["position"][0] - couloir["longueur"]/2) and ( z < couloir["position"][2]) and ( z > couloir["position"][2] - couloir["largeur"]):
                return compteur
        if couloir["flag"] == VERTICAL:
            if ((x < couloir["position"][0]) and (x > couloir["position"][0] - couloir["largeur"]) and (z < couloir["position"][2] + couloir["longueur"]/2) and (z > couloir["position"][2] - couloir["longueur"]/2)):
                return compteur
        compteur+=1
    return 99
